<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Do while loop</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Do_while_loop"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Do_while_loop rootpage-Do_while_loop skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Do while loop</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" ยท ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1246091330">
/* start https://en.wikipedia.org/ */
.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:640px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media print{body.ns-0 .mw-parser-output .sidebar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><table class="sidebar nomobile nowraplinks"><tbody><tr><th class="sidebar-title"><a href="Control_flow#Loops" title="Control flow">Loop constructs</a></th></tr><tr><td class="sidebar-content">
<div class="hlist">
<ul>
<li><a href="While_loop" title="While loop">While loop</a></li>
<li><a href="For_loop" title="For loop">For loop</a></li>
<li><a href="Foreach_loop" title="Foreach loop">Foreach loop</a></li>
<li><a href="Infinite_loop" title="Infinite loop">Infinite loop</a></li>
<li><a href="Control_flow" title="Control flow">Control flow</a></li></ul>
</div></td>
</tr><tr><td class="sidebar-navbar"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></td></tr></tbody></table>
<p>In many <a href="Computer_programming" title="Computer programming">computer programming</a> <a href="Programming_language" title="Programming language">languages</a>, a <b>do while loop</b> is a <a href="Control_flow" title="Control flow">control flow</a> <a href="Statement_(computer_science)" title="Statement (computer science)">statement</a> that executes a block of code and then either repeats the block or exits the loop depending on a given <a href="Boolean_data_type" title="Boolean data type">boolean</a> condition.
</p><p>The <i>do while</i> construct consists of a process symbol and a condition. First the code within the block is executed. Then the condition is evaluated. If the condition is <a href="Truth" title="Truth">true</a> the code within the block is executed again. This repeats until the condition becomes <a href="False_(logic)" title="False (logic)">false</a>.
</p><p>Do while loops check the condition after the block of code is executed. This control structure can be known as a <b>post-test loop</b>. This means the do-while loop is an exit-condition loop. However a <a href="While_loop" title="While loop">while loop</a> will test the condition before the code within the block is executed.
</p><p>This means that the code is always executed first and then the expression or test condition is evaluated. This process is repeated as long as the expression evaluates to true. If the expression is false the loop terminates. A while loop sets the truth of a statement as a necessary condition for the code's execution. A do-while loop provides for the action's ongoing execution until the condition is no longer true.
</p><p>It is possible and sometimes desirable for the condition to always evaluate to be true. This creates an <a href="Infinite_loop" title="Infinite loop">infinite loop</a>. When an infinite loop is created intentionally there is usually another control structure that allows termination of the loop. For example, a <a href="Control_flow#Early_exit_from_loops" title="Control flow">break statement</a> would allow termination of an infinite loop.
</p><p>Some languages may use a different naming convention for this type of loop. For example, the <a href="Pascal_programming_language" class="mw-redirect" title="Pascal programming language">Pascal</a> and <a href="Lua_(programming_language)" class="mw-redirect" title="Lua (programming language)">Lua</a> languages have a "<i>repeat until</i>" loop, which continues to run <i>until</i> the control expression is true and then terminates. In contrast a "while" loop runs <i>while</i> the control expression is true and terminates once the expression becomes false.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Equivalent_constructs">Equivalent constructs</h2></div>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="k">do</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">do_work</span><span class="p">();</span>
<span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">condition</span><span class="p">);</span>
</pre></div>
<p>is equivalent to
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="n">do_work</span><span class="p">();</span>
<span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">condition</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">do_work</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p>In this manner, the do ... while loop saves the initial "loop priming" with <code>do_work();</code> on the line before the <code>while</code> loop.
</p><p>As long as the <i>continue</i> statement is not used, the above is technically equivalent to the following (though these examples are not typical or modern style used in everyday computers):
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="nb">true</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">do_work</span><span class="p">();</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">condition</span><span class="p">)</span><span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>or
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span class="nl">LOOPSTART</span><span class="p">:</span>
<span class="w"> </span><span class="n">do_work</span><span class="p">();</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">condition</span><span class="p">)</span><span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">LOOPSTART</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Demonstrating_do_while_loops">Demonstrating do while loops</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<p>These example programs calculate the <a href="Factorial" title="Factorial">factorial</a> of 5 using their respective languages' syntax for a do-while loop.
</p>
<div class="mw-heading mw-heading3"><h3 id="Ada">Ada</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Ada_(programming_language)" title="Ada (programming language)">Ada (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-ada mw-content-ltr" dir="ltr"><pre><span class="kn">with</span> <span class="n">Ada.Integer_Text_IO</span><span class="p">;</span>
<span class="kd">procedure</span> <span class="nf">Factorial</span> <span class="kr">is</span>
<span class="n">Counter</span> <span class="p">:</span> <span class="kt">Integer</span> <span class="p">:=</span> <span class="mi">5</span><span class="p">;</span>
<span class="n">Factorial</span> <span class="p">:</span> <span class="kt">Integer</span> <span class="p">:=</span> <span class="mi">1</span><span class="p">;</span>
<span class="kr">begin</span>
<span class="kr">loop</span>
<span class="n">Factorial</span> <span class="p">:=</span> <span class="n">Factorial</span> <span class="o">*</span> <span class="n">Counter</span><span class="p">;</span>
<span class="n">Counter</span> <span class="p">:=</span> <span class="n">Counter</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
<span class="kr">exit</span> <span class="kr">when</span> <span class="n">Counter</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kr">end</span> <span class="kr">loop</span><span class="p">;</span>
<span class="n">Ada</span><span class="p">.</span><span class="n">Integer_Text_IO</span><span class="p">.</span><span class="n">Put</span> <span class="p">(</span><span class="n">Factorial</span><span class="p">);</span>
<span class="kr">end</span> <span class="nf">Factorial</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="BASIC">BASIC</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="BASIC" title="BASIC">BASIC</a></div>
<p>Early BASICs (such as <a href="GW-BASIC" title="GW-BASIC">GW-BASIC</a>) used the syntax WHILE/WEND. Modern BASICs such as <a href="PowerBASIC" title="PowerBASIC">PowerBASIC</a> provide both WHILE/WEND and DO/LOOP structures, with syntax such as DO WHILE/LOOP, DO UNTIL/LOOP, DO/LOOP WHILE, DO/LOOP UNTIL, and DO/LOOP (without outer testing, but with a conditional EXIT LOOP somewhere inside the loop). Typical BASIC source code:
</p>
<div class="mw-highlight mw-highlight-lang-vbnet mw-content-ltr" dir="ltr"><pre><span class="k">Dim</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="ow">As</span><span class="w"> </span><span class="kt">Integer</span>
<span class="k">Dim</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="ow">As</span><span class="w"> </span><span class="kt">Integer</span>
<span class="n">factorial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
<span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span>
<span class="k">Do</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">counter</span>
<span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span>
<span class="k">Loop</span><span class="w"> </span><span class="k">While</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span>
<span class="n">Print</span><span class="w"> </span><span class="n">factorial</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="C,_C++,_D">C, C++, D</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="C_(programming_language)" title="C (programming language)">C (programming language)</a>, <a href="C%2B%2B" title="C++">C++</a>, and <a href="D_(programming_language)" title="D (programming language)">D (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-c++ mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="k">do</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">*=</span><span class="w"> </span><span class="n">counter</span><span class="o">--</span><span class="p">;</span><span class="w"> </span><span class="c1">// Multiply, then decrement.</span>
<span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">counter</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="n">std</span><span class="o">::</span><span class="n">println</span><span class="p">(</span><span class="s">"factorial of 5 is {}"</span><span class="p">,</span><span class="w"> </span><span class="n">factorial</span><span class="p">);</span>
</pre></div>
<p>Do-while(0) statements are also commonly used in C macros as a way to wrap multiple statements into a regular (as opposed to compound) statement. It makes a semicolon needed after the macro, providing a more function-like appearance for simple parsers and programmers as well as avoiding the scoping problem with <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">if</code>. It is recommended in <a href="CERT_C_Coding_Standard" class="mw-redirect" title="CERT C Coding Standard">CERT C Coding Standard</a> rule PRE10-C.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Fortran">Fortran</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Fortran" title="Fortran">Fortran</a></div>
<p>With legacy <i>Fortran 77</i> there is no DO-WHILE construct but the same effect can be achieved with GOTO:
</p>
<div class="mw-highlight mw-highlight-lang-fortran mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="kt">INTEGER </span><span class="n">CNT</span><span class="p">,</span><span class="n">FACT</span>
<span class="w"> </span><span class="n">CNT</span><span class="o">=</span><span class="mi">5</span>
<span class="w"> </span><span class="n">FACT</span><span class="o">=</span><span class="mi">1</span>
<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">CONTINUE</span>
<span class="k"> </span><span class="n">FACT</span><span class="o">=</span><span class="n">FACT</span><span class="o">*</span><span class="n">CNT</span>
<span class="w"> </span><span class="n">CNT</span><span class="o">=</span><span class="n">CNT</span><span class="o">-</span><span class="mi">1</span>
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="p">(</span><span class="n">CNT</span><span class="p">.</span><span class="n">GT</span><span class="p">.</span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="k">PRINT</span><span class="o">*</span><span class="p">,</span><span class="n">FACT</span>
<span class="w"> </span><span class="k">END</span>
</pre></div>
<p><b>Fortran 90</b> and later supports a DO-While construct:
</p>
<div class="mw-highlight mw-highlight-lang-fortran mw-content-ltr" dir="ltr"><pre><span class="k">program </span><span class="n">FactorialProg</span>
<span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span>
<span class="w"> </span><span class="kt">integer</span><span class="w"> </span><span class="kd">::</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">counter</span>
<span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="k">do while</span><span class="w"> </span><span class="p">(</span><span class="n">counter</span><span class="w"> </span><span class="o">/=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">counter</span>
<span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="k">end do</span>
<span class="k"> print</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="n">factorial</span>
<span class="k">end program </span><span class="n">FactorialProg</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Java">Java</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Java_(programming_language)" title="Java (programming language)">Java (programming language)</a></div>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kt">int</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="k">do</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">*=</span><span class="w"> </span><span class="n">counter</span><span class="o">--</span><span class="p">;</span><span class="w"> </span><span class="c1">// Multiply, then decrement.</span>
<span class="p">}</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">counter</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"The factorial of 5 is "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">factorial</span><span class="p">);</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Pascal">Pascal</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal (programming language)</a></div>
<p><a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a> uses repeat/until syntax instead of do while.
</p>
<div class="mw-highlight mw-highlight-lang-pascal mw-content-ltr" dir="ltr"><pre><span class="n">factorial</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="mi">1</span><span class="o">;</span>
<span class="n">counter</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="mi">5</span><span class="o">;</span>
<span class="k">repeat</span>
<span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">counter</span><span class="o">;</span>
<span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="o">;</span><span class="w"> </span><span class="c1">// In Object Pascal one may use dec (counter);</span>
<span class="k">until</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="o">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="PL/I">PL/I</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="PL/I" title="PL/I">PL/I</a></div>
<p>The <a href="PL/I" title="PL/I">PL/I</a> DO statement subsumes the functions of the post-test loop (<i>do until</i>), the pre-test loop (<i>do while</i>), and the <a href="For_loop" title="For loop">for loop</a>. All functions can be included in a single statement. The example shows only the "do until" syntax.
</p>
<div class="mw-highlight mw-highlight-lang-rexx mw-content-ltr" dir="ltr"><pre>declare<span class="w"> </span>counter<span class="w"> </span>fixed<span class="w"> </span>initial<span class="o">(</span><span class="m">5</span><span class="o">)</span><span class="err">;</span>
declare<span class="w"> </span>factorial<span class="w"> </span>fixed<span class="w"> </span>initial<span class="o">(</span><span class="m">1</span><span class="o">)</span><span class="err">;</span>
<span class="kr">do</span><span class="w"> </span><span class="kr">until</span><span class="o">(</span>counter<span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="m">0</span><span class="o">)</span><span class="err">;</span>
<span class="w"> </span>factorial<span class="w"> </span><span class="o">=</span><span class="w"> </span>factorial<span class="w"> </span><span class="o">*</span><span class="w"> </span>counter<span class="err">;</span>
<span class="w"> </span>counter<span class="w"> </span><span class="o">=</span><span class="w"> </span>counter<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="err">;</span>
<span class="kr">end</span><span class="err">;</span>
put<span class="o">(</span>factorial<span class="o">)</span><span class="err">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Python">Python</h3></div><p>
Python does not have a DO-WHILE loop, but its effect can be achieved by an infinite loop with a breaking condition at the end.</p><div class="mw-highlight mw-highlight-lang-python3 mw-content-ltr" dir="ltr"><pre><span class="n">factorial</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">5</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">factorial</span> <span class="o">*=</span> <span class="n">counter</span>
<span class="n">counter</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">counter</span> <span class="o"><</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">break</span>
<span class="nb">print</span><span class="p">(</span><span class="n">factorial</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Racket">Racket</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Racket_(programming_language)" title="Racket (programming language)">Racket (programming language)</a></div>
<p>In Racket, as in other <a href="Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> implementations, a "named-let" is a popular way to implement loops:
</p>
<div class="mw-highlight mw-highlight-lang-racket mw-content-ltr" dir="ltr"><pre><span class="kn">#lang </span><span class="nn">racket</span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="mi">5</span><span class="p">)</span>
<span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span>
<span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="n">loop</span><span class="w"> </span><span class="p">()</span>
<span class="w"> </span><span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="p">(</span><span class="nb">*</span><span class="w"> </span><span class="n">factorial</span><span class="w"> </span><span class="n">counter</span><span class="p">))</span>
<span class="w"> </span><span class="p">(</span><span class="k">set!</span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="p">(</span><span class="nb">sub1</span><span class="w"> </span><span class="n">counter</span><span class="p">))</span>
<span class="w"> </span><span class="p">(</span><span class="k">when</span><span class="w"> </span><span class="p">(</span><span class="nb">></span><span class="w"> </span><span class="n">counter</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">loop</span><span class="p">)))</span>
<span class="p">(</span><span class="nb">displayln</span><span class="w"> </span><span class="n">factorial</span><span class="p">)</span>
</pre></div>
<p>Compare this with the first example of the <a href="While_loop#Racket" title="While loop">while loop</a> example for Racket. Be aware that a named let can also take arguments.
</p><p>Racket and Scheme also provide a proper do loop.
</p>
<div class="mw-highlight mw-highlight-lang-scheme mw-content-ltr" dir="ltr"><pre><span class="p">(</span><span class="k">define</span><span class="w"> </span><span class="p">(</span><span class="nf">factorial</span><span class="w"> </span><span class="nv">n</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="k">do</span><span class="w"> </span><span class="p">((</span><span class="nf">counter</span><span class="w"> </span><span class="nv">n</span><span class="w"> </span><span class="p">(</span><span class="nb">-</span><span class="w"> </span><span class="nv">counter</span><span class="w"> </span><span class="mi">1</span><span class="p">))</span>
<span class="w"> </span><span class="p">(</span><span class="nf">result</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">(</span><span class="nb">*</span><span class="w"> </span><span class="nv">result</span><span class="w"> </span><span class="nv">counter</span><span class="p">)))</span>
<span class="w"> </span><span class="p">((</span><span class="nb">=</span><span class="w"> </span><span class="nv">counter</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="nv">result</span><span class="p">)</span><span class="w"> </span><span class="c1">; Stop condition and return value.</span>
<span class="w"> </span><span class="c1">; The body of the do-loop is empty.</span>
<span class="w"> </span><span class="p">))</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Smalltalk">Smalltalk</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Smalltalk" title="Smalltalk">Smalltalk</a></div>
<div class="mw-highlight mw-highlight-lang-smalltalk mw-content-ltr" dir="ltr"><pre><span class="o">|</span><span class="nv"> counter factorial </span><span class="o">|</span>
<span class="nv">counter</span> <span class="o">:=</span> <span class="m">5</span><span class="p">.</span>
<span class="nv">factorial</span> <span class="o">:=</span> <span class="m">1</span><span class="p">.</span>
[<span class="nv">counter</span> <span class="nf">></span> <span class="m">0</span>] <span class="nb">whileTrue:</span>
[<span class="nv">factorial</span> <span class="o">:=</span> <span class="nv">factorial</span> <span class="nf">*</span> <span class="nv">counter</span><span class="p">.</span>
<span class="nv">counter</span> <span class="o">:=</span> <span class="nv">counter</span> <span class="nf">-</span> <span class="m">1</span>]<span class="p">.</span>
<span class="nc">Transcript</span> <span class="nf">show:</span> <span class="nv">factorial</span> <span class="nf">printString</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Control_flow" title="Control flow">Control flow</a></li>
<li><a href="For_loop" title="For loop">For loop</a></li>
<li><a href="Foreach_loop" title="Foreach loop">Foreach loop</a></li>
<li><a href="Repeat_loop_(disambiguation)" class="mw-redirect mw-disambig" title="Repeat loop (disambiguation)">Repeat loop (disambiguation)</a></li>
<li><a href="While_loop" title="While loop">While loop</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://stackoverflow.com/a/1067238">"C multi-line macro: do/while(0) vs scope block"</a>. <i>Stack Overflow</i>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1290876196">
/* start https://en.wikipedia.org/ */
.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:var(--background-color-interactive-subtle,#f8f9fa);display:flow-root}.mw-parser-output .infobox .side-box{font-size:100%}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1237033735">
/* start https://en.wikipedia.org/ */
@media print{body.ns-0 .mw-parser-output .sistersitebox{display:none!important}}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sistersitebox img[src*="Wiktionary-logo-en-v2.svg"]{background-color:white}}
/* end https://en.wikipedia.org/ */
</style><div class="side-box side-box-right sistersitebox"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */
.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}
/* end https://en.wikipedia.org/ */
</style>
<div class="side-box-flex">
<div class="side-box-image"><span class="noviewer" typeof="mw:File"></span></div>
<div class="side-box-text plainlist">The Wikibook <i><a href="https://en.wikibooks.org/wiki/Ada_Programming" class="extiw external" title="wikibooks:Ada Programming">Ada Programming</a></i> has a page on the topic of: <i><b><a href="https://en.wikibooks.org/wiki/Ada_Programming/Control" class="extiw external" title="wikibooks:Ada Programming/Control">Control</a></b></i></div></div>
</div>
<ul><li><a rel="nofollow" class="external text" href="http://www.pixelstech.net/article/1390482950-do-%7B-%7D-while-%280%29-in-macros">do {...} while (0) in C macros</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-05-26" href="https://en.wikipedia.org/wiki/?title=Do_while_loop&oldid=1292267398">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>